#银行自助存取款机
from db.model import Model

#界面1:系统进入界面
def interface():
	"系统进入界面"
	print("="*40)
	print("{}{:^29}{}".format("=","XXXX银行自助存取款系统","="))
	print("="*40)
	print("{}{:^33}{}".format("=","1、登录账号","="))
	print("{}{:^33}{}".format("=","2、退出系统","="))	
	print("="*40)
	while True:
		print()
		cmd = int(input("============ 请输入操作指令！===========\n>:"))
		if cmd == 1:
			return 1
		elif cmd == 2:
			break

#界面2:账号密码输入界面
def inputAccount(mod):
	"账号输入界面"
	while True:
		print()
		account = input("============ 请输入19位数账号!==========\n>:")
		if len(account) != 19: #判断是不是输入了19位
			print("============ 输入账号位数有误！=========\n")
		else:
			if account.isdigit() == True:
				#判断数据表中有无该账户
				alist = mod.findAll()
				for i in range(len(alist)):
					if account == alist[i]["account"]:
						rnum = inputPassword(i,mod)
						if rnum == False: #如果密码输入超过三次就会返回False
							return -1
						elif rnum == 1:
							print("密码正确",i)#测试
							return i

				print("=========== 您输入的用户不存在 =========")
				return -1	

			else:	#若不是全由数字组成就提示格式错误
				print()
				print("============ 请输入正确的格式！=========\n")


def inputPassword(member,mod): #这里的member就是数据表中的id-1
	"密码输入界面"
	chance = 3 #用户只有三次输入密码的机会
	alist = mod.findAll()

	while chance>0:
		print()
		password = input("============ 请输入6位数密码!===========\n>:")
		if len(password) != 6:
			print()
			print("============ 输入密码位数有误！=========\n")
			chance -= 1 #用掉一次机会
		else:
			if password.isdigit() == True: #判断输入的密码是数字组成的不
				if password == alist[member]["pwd"]:
					return 1 #返回1表示输入密码正确，成功进入数据表
				else:
					print("============ 输入密码有误！=============")
					chance -= 1 #用掉一次机会
			else:
				print()
				print("============ 请输入正确的格式！=========\n")
				chance -= 1	#用掉一次机会
	
	return False

#界面3:用户操作界面
def operation(member,mod):
	"用户操作界面"
	print("="*40)
	print("{:>19}{:>19}{:>19}{:>18}".format("1、存款\n","2、取款\n","3、查询\n","4、退出"))
	print("="*40)
	cmd = input("============ 请输入操作指令！===========\n>:")

	if cmd == '1':
		deposit = int(input("输入存款金额！\n>:"))
		#计算出存完款后的账户余额
		new_deposit = mod.find(member+1)["ck"]+deposit 
		#将存完款后的余额更改到数据库
		data = {'id':member+1,'ck':new_deposit} 
		mod.update(data)
		
		print("=============== 存款成功！==============")

	elif cmd =='2':

		print("当前余额：{}".format(mod.find(member+1)["ck"]))

		deposit = int(input("输入取款金额！\n>:"))
		#对取完款后的余额进行更新
		new_deposit = mod.find(member+1)["ck"] - deposit
		data = {'id':member+1,'ck':new_deposit} 
		mod.update(data)

		print("正在出纳请稍后...\n取款成功！\n")

		
	elif cmd =='3':
		faccount = mod.find(id=member+1)#查询指定ID的账户信息
		print("="*40)
		print("{:>10}{}|{}{}".format("姓名：",faccount["name"],"当前余额：",faccount["ck"]))
		print("="*40+"\n")
	
	elif cmd =='4':
		return 4						
	else:
		print("============ 请输入正确的指令！=========\n")


if __name__ =="__main__":
	#判断当前是否在主程序中
	
	mod = Model("atm")#实例化自定义数据库操作类
	if interface()==1:#如果用户登录了系统
		member = -1   #初始化用户为-1表示当前没有用户进行数据访问
		interrupt = False #中断标志位，在任何时候为真，都将直接退出程序

		while interrupt==False:
			member = inputAccount(mod) #不断地接收用户输入账号密码，返回的是当前操作ATM的人所进入的账户(id-1)
			if member == -1: #由于密码输入超过三次
				interrupt = True	#将中断标志变成True,停止运行程序
				print("密码输入超过三次！！！强行退出系统！！！")
			elif member >= 0: #只有当用户输入正确的账户和密码才结束
				break

		while interrupt==False:
			operation(member,mod)
			print("="*40)
			cmd = int(input("{:>15}  {}".format("1、退出","2、继续\n>:"))) 

			if cmd == 1:
				break
			elif cmd ==2:
				continue
			else:
				print("============ 请输入正确的指令！=========\n")	

	else:
		print("系统正在退出中...\n已退出")

